#pragma once

#ifndef UDBREVOLVEDSURF_H
#define UDBREVOLVEDSURF_H

#include "zdbsurf.h"

#pragma pack(push, 8)
class UcDbRevolvedSurface: public UcDbSurface
{
public:
    UcDbRevolvedSurface ();
    virtual ~UcDbRevolvedSurface();
    UCDB_DECLARE_MEMBERS(UcDbRevolvedSurface);
    virtual Ucad::ErrorStatus createRevolvedSurface ( UcDbEntity* pRevEnt,
        const UcGePoint3d& axisPnt, const UcGeVector3d& axisDir,
        double revAngle, double startAngle,
        UcDbRevolveOptions& revolveOptions );
    UcDbEntity*   getRevolveEntity () const;
    UcGePoint3d        getAxisPnt () const;
    Ucad::ErrorStatus  setAxisPnt ( const UcGePoint3d& pnt );
    UcGeVector3d       getAxisVec () const;
    Ucad::ErrorStatus  setAxisVec ( const UcGeVector3d& vec );
    double             getRevolveAngle () const;
    Ucad::ErrorStatus  setRevolveAngle ( double ang );
    double             getStartAngle () const;
    void               getRevolveOptions ( UcDbRevolveOptions& revolveOptions ) const;
    Ucad::ErrorStatus  setRevolveOptions ( const UcDbRevolveOptions& revolveOptions );
    Ucad::ErrorStatus  setRevolve ( const UcGePoint3d& axisPnt, const UcGeVector3d& axisVec,
                                    double revAngle, const UcDbRevolveOptions& revolveOptions );
    virtual void list() const;

	virtual Ucad::ErrorStatus dwgInFields(UcDbDwgFiler* pFiler);
	virtual Ucad::ErrorStatus dwgOutFields(UcDbDwgFiler* pFiler) const;
	virtual Ucad::ErrorStatus dxfInFields(UcDbDxfFiler* pFiler);
	virtual Ucad::ErrorStatus dxfOutFields(UcDbDxfFiler* pFiler) const;

    virtual Ucad::ErrorStatus getClassID(CLSID* pClsid) const;

    virtual Ucad::ErrorStatus getGripPoints ( UcGePoint3dArray&  gripPoints,
                                              UcDbIntArray&  osnapModes,
                                              UcDbIntArray &  geomIds ) const;
    virtual Ucad::ErrorStatus getGripPoints ( UcDbGripDataPtrArray& grips,
                                              const double curViewUnitSize,
                                              const int gripSize,
                                              const UcGeVector3d& curViewDir,
                                              const int bitflags ) const;
    virtual Ucad::ErrorStatus moveGripPointsAt ( const UcDbIntArray& indices,
                                                 const UcGeVector3d& offset );
    virtual Ucad::ErrorStatus moveStretchPointsAt ( const UcDbIntArray& indices,
                                                    const UcGeVector3d& offset );

    virtual Ucad::ErrorStatus getGripEntityUCS ( const void* pGripAppData,
                                                 UcGeVector3d& normalVec,
                                                 UcGePoint3d& origin,
                                                 UcGeVector3d& xAxis ) const;

    virtual bool isDependent() const;

};
#pragma pack(pop)

#endif 
